/**
 * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
 */
package com.jeeplus.modules.sys.mapper;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.jeeplus.modules.sys.entity.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.jeeplus.core.persistence.BaseMapper;

import org.springframework.stereotype.Repository;

/**
 * 用户MAPPER接口
 * @author jeeplus
 * @version 2017-05-16
 */
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
	
	/**
	 * 根据登录名称查询用户
	 * @param user
	 * @return
	 */
	public User getByLoginName(User user);

	/**
	 * 根据登录名称查询历史用户
	 * @param user
	 * @return
	 */
	public User getByLoginNameCache(User user);


	void deleteByLoginNameCache(String loginName);

	/**
	 * 通过OfficeId获取用户列表，仅返回用户id和name（树查询用户时用）
	 * @param user
	 * @return
	 */
	public List<User> findUserByOfficeId(User user);
	
	/**
	 * 查询全部用户数目
	 * @return
	 */
	public long findAllCount(User user);
	
	/**
	 * 更新用户密码
	 * @param user
	 * @return
	 */
	public int updatePasswordById(User user);
	
	/**
	 * 更新登录信息，如：登录IP、登录时间
	 * @param user
	 * @return
	 */
	public int updateLoginInfo(User user);

	/**
	 * 删除用户角色关联数据
	 * @param user
	 * @return
	 */
	public int deleteUserRole(User user);
	
	/**
	 * 插入用户角色关联数据
	 * @param user
	 * @return
	 */
	public int insertUserRole(User user);
	
	/**
	 * 更新用户信息
	 * @param user
	 * @return
	 */
	public int updateUserInfo(User user);

	/**
	 * 更新用户标识信息
	 * @param loginName
	 * @return
	 */
	public int updateUser(String loginName);


	/**
	 * 获取是否右第三方用户记录
	 * @param
	 * @return
	 */
	public Integer findUserMatter(String openid);

	/**
	 * 添加第三方数据
	 * @return
	 */
	public void insertOther(String openid,String userid,String tell,String url);

	/**
	 * 更新第三方数据
	 * @return
	 */
	public void updateOther(String openid,String userid,String tell,String url);

	/**
	 * 更新跳转地址
	 * @return
	 */
	public void updateUrl(String openid,String url);

	
	/**
	 * 插入好友
	 */
	public int insertFriend(@Param("id") String id, @Param("userId") String userId, @Param("friendId") String friendId);
	
	/**
	 * 查找好友
	 */
	public User findFriend(@Param("userId") String userId, @Param("friendId") String friendId);
	/**
	 * 删除好友
	 */
	public void deleteFriend(@Param("userId") String userId, @Param("friendId") String friendId);
	
	/**
	 * 
	 * 获取我的好友列表
	 * 
	 */
	public List<User> findFriends(User currentUser);
	
	/**
	 * 
	 * 查询用户-->用来添加到常用联系人
	 * 
	 */
	public List<User> searchUsers(User user);
	
	/**
	 * 
	 */
	
	public List<User>  findListByOffice(User user);
	
	/**   新添加方法-sunping   */
	/**
	 * 提供资源共享的部门总数统计
	 * @return
	 * @see [类、类#方法、类#成员]
	 */
	public Long sharecompanyNumber();
    /**
     * 共享资源类别种类数
     * @return
     * @see [类、类#方法、类#成员]
     */
    public Long resNumber();
    /**
     * 共享资源记录数量
     * @return
     * @see [类、类#方法、类#成员]
     */
    public String sharevolNum();
    /**
     * 开放资源记录数量
     * @return
     * @see [类、类#方法、类#成员]
     */
    public String publicvolNum();

	/**
	 * 查询点单登录用户是否存在
	 * @param id 单登录用户ID
	 * @return 单登录用户名和密码
	 */
	public Map<String,String> getSSOUser(int id);

	/**
	 * 查询全部用户的ID
	 * @return id集合
	 */
	public List<String> findAllID();

	/**
	 * 添加二维码记录
	 * insertQR
	 * @return 受影响的行数
	 */
	void insertQR(String uuid,String createTime,int loseTime,String loginName,String tell);
	/**
	 * 获取二维码数据
	 * getUserCode
	 * @return 受影响的行数
	 */
	MobileUserQR getUserCode(String uuid, int loseTime);

	/**
	 * 获取用户基础信息
	 * getUserIdcard
	 * @return 受影响的行数
	 */
	MobileUserQR getUserIdcard(String loginName);

	/**
	 * 获取法人基础信息
	 * getLegalValue
	 * @return 受影响的行数
	 */
	MobileLegal getLegalValue(String loginName);

	/**
	 * 获取用户基础信息
	 * getUserIdcard
	 * @return 受影响的行数
	 */
	MobileUserQR getUserIdcardByTell(String tell);

	/**
	 * 获取用户基础信息
	 * findUser
	 * @return 受影响的行数
	 */
	User findUser(@Param("loginName") String loginName);

	/**
	 * 添加办件编码和群众信息绑定
	 * toThingCode
	 * @return 受影响的行数
	 */
	int toThingCode(String code,String loginName,String doTime,int isYYYZ);

	String findUserQcode(String id);

	List<User> getUserList(String loginName, String name);

	Map<String,Object> getUserValue(String loginName);

	String findKey(String uuid,int loseTime);
	MobileGxUser getGxUserCode(String uuid);
	List<UserMaterial> findUserMaterial(String idcard);
	int checkUserIp(String publicIp);
	int checkUserIpZF(String publicIp);
	int delUserByName(String loginName);
	int delUserById(String id);
	int delUserRoleById(String id);
	int delUserMaterials(String loginName);
	int updateUserPhone(String newtell,String loginName,String oldtell);
	int updateUserOpenid(String tell,String loginName);
	Integer getUserPhone(String tell);
	void intoUserQR(String name,String idcard,String tell,String doTime);

	/**
	 * 是否企业认证通过社会组织代码查询
	 * findlegalUser
	 * @return 受影响的行数
	 */
	Integer findlegalUser(String socialCode,String loginName);
	/**
	 * 是否企业认证通过关联微信id
	 * checklegalUser
	 * @return 受影响的行数
	 */
	HashMap<String,Object> checklegalUser(String loginName);
	/**
	 * 添加企业信息
	 * intolegalUser
	 * @return 受影响的行数
	 */
	Integer intolegalUser(String legalName,String companyName,String socialCode,String idcard,String tell,String createTime,String loginName,String pageUrl);

	/**
	 * 更新旧企业信息
	 * updatelegalUser
	 * @return 受影响的行数
	 */
	Integer updatelegalUser(String legalName,String companyName,String socialCode,String idcard,String tell,String createTime,String loginName,String pageUrl);

	/**
	 * 查询法人注册跳转url
	 * findPageUrl
	 * @return 受影响的行数
	 */
	String findPageUrl(String loginName);

	/**
	 * 更新法人身份证照片
	 * updatelegalUserImg
	 * @return 受影响的行数
	 */
	Integer updatelegalUserImg(String companyName,String ocrBack,String ocrFront,String idcard,String bizToken,String loginName);


	/**
	 * 添加一码办成事人脸记录
	 * intoUserCheck
	 * @return 受影响的行数
	 */
	Integer intoUserCheck(String loginName,String checkTime,String BizToken);

	/**
	 * 查询一码办成事人脸记录
	 * findUserCheck
	 * @return 受影响的行数
	 */
	Integer findUserCheck(String loginName);

	/**
	 * 通过用户id获取用户信息
	 * getUserValueById
	 * @return 受影响的行数
	 */
	HashMap<String,String> getUserValueById(String id);

	/**
	 * 删除法人信息
	 * delLegal
	 * @return 受影响的行数
	 */
	Integer delLegal(String loginName);

	/**
	 * 是否企业法人
	 * checklegalUserCount
	 * @return 受影响的行数
	 */
	Integer checklegalUserCount(String loginName);

	/**
	 * 授权列表
	 * legalList
	 * @return 受影响的行数
	 */
	List<HashMap<String,String>> legalList(String loginName);

	/**
	 * 授权查询
	 * legalByIdcard
	 * @return 受影响的行数
	 */
	HashMap<String,String> legalByIdcard(String idcard);

	/**
	 * 查询授权数据
	 * findLegalValue
	 * @return 受影响的行数
	 */
	HashMap<String,String> findLegalValue(String loginName);

	/**
	 * 添加授权数据
	 * intolegalUserAll
	 * @return 受影响的行数
	 */
	Integer intolegalUserAll(HashMap<String,String> map);


	/**
	 * 获取用户数据
	 * getUserByToken
	 * @return 受影响的行数
	 */
	HashMap<String,String> getUserByToken(String loginName);

	/**
	 * 获取人才用户数据
	 * getUserByToken
	 * @return 受影响的行数
	 */
	MobileRC getUserRC(String loginName);

	/**
	 * 获取一码办成事用户数据
	 * ymbcsUserByTell
	 * @return 受影响的行数
	 */
	YmbcsUserZF ymbcsUserByTell(String tell);

	/**
	 * 获取用户名
	 * findLoginName
	 * @return 受影响的行数
	 */
	String findLoginName(String tell);

	/**
	 * 获取用户名id
	 * findIdByLoginName
	 * @return 受影响的行数
	 */
	String findIdByLoginName(String loginName);


	/**
	 * 获取用户名 第三方
	 * findLoginName
	 * @return 受影响的行数
	 */
	String findLoginNameOther(String tell);
	/**
	 * 登录失败记录
	 * @intoUserLog
	 * @see [类、类#方法、类#成员]
	 */
	public void intoUserLog(String userName,String doTime,String publicIp);
	/**
	 * 登录ip次数判断
	 * @intoUserLog
	 * @see [类、类#方法、类#成员]
	 */
	int checkLoginIp(String publicIp);

	/**
	 * 查询登录失败记录
	 * @findUserLog
	 * @see [类、类#方法、类#成员]
	 */
	Integer findUserLog(String userName);


	/**
	 * 查询企业信息
	 * @findUserLog
	 * @see [类、类#方法、类#成员]
	 */
	YmbcsCompany findCompany(String loginName);

	/**
	 * 获取扫码用户数据
	 * ymbcsUserValueQR
	 * @return 受影响的行数
	 */
	HashMap<String,String> ymbcsUserValueQR(String uuid);

	/**
	 * 判断该二维码是否已扫码使用 禁止重复扫码
	 * @checkUUID
	 * @see [类、类#方法、类#成员]
	 */
	Integer checkUUID(String uuid);

	/**
	 * 添加扫码记录
	 * @intoQJQR
	 * @see [类、类#方法、类#成员]
	 */
	void intoQJQR(String qjQR,String loginName);

	/**
	 * 更新扫码记录
	 * @updateQJQRStatus
	 * @see [类、类#方法、类#成员]
	 */
	void updateQJQRStatus(String loginName);

	/**
	 * 统计扫码记录
	 * @findCountQR
	 * @see [类、类#方法、类#成员]
	 */
	Integer findCountQR(String qjQR);

	/**
	 * 群众操作记录
	 * @intoUserHistory
	 * @see [类、类#方法、类#成员]
	 */
	void intoUserHistory(String openid,String doMthod,String doResult,String number,String areaId,String tell);

	/**
	 * 获取用户信息
	 * @getUserCompany
	 * @see [类、类#方法、类#成员]
	 */
	HashMap<String,String> getUserCompany(String loginName);
}
